package com.demo.java.OD551_600.OD578;

import java.util.Scanner;
import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【最长广播响应(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146564670
 */
public class OdMain {
    public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();  // 节点数量
        int T = in.nextInt();  // 连接数量

        // 初始化节点之间的关系，key为节点，value为相邻节点set
        HashMap<Integer, HashSet<Integer>> map_info = new HashMap<>();
        for (int i = 0; i < T; i++) {
            int start = in.nextInt();  // 连接的起始节点
            int end = in.nextInt();    // 连接的终止节点
            if (!map_info.containsKey(start)) {
                map_info.put(start, new HashSet<>());
            }
            if (!map_info.containsKey(end)) {
                map_info.put(end, new HashSet<>());
            }
            // 无向图，节点是相互连接的
            map_info.get(start).add(end);
            map_info.get(end).add(start);
        }

        // 起始节点
        int head = in.nextInt();
        Deque<Integer> node_queue = new LinkedList<>();
        node_queue.add(head);

        // 记录是否已经访问过节点
        Set<Integer> visited = new HashSet<>();

        // 存储每个节点的最短路径长度
        int[] d = new int[N + 1];

        // 广度优先搜索（BFS）
        while (!node_queue.isEmpty()) {
            int poll = node_queue.pollFirst();
            for (int node : map_info.get(poll)) {
                if (!visited.contains(node)) {
                    visited.add(node);
                    d[node] = d[poll] + 1;  // 更新节点的最短路径
                    node_queue.add(node);
                }
            }
        }

        // 求最远节点的传播时间
        int max_time = 0;
        for (int i = 1; i < N + 1; i++) {
            max_time = Math.max(max_time, d[i]);
        }

        // 输出最远节点的传播时间的两倍
        System.out.println(max_time * 2);
    }
}